/* 在类上使用泛型 */

// 3、类中使用了泛型 则类的名字上就得声明泛型
class Greeter<T> {
   // 2、类型也得声明为T
   person: T;

   // 1、想让person入参支持任意类型
   constructor(person: T) {
      this.person = person;
   }

   greet() {
      return "Hello, " + this.person;
   }
}

let greeter;

// 4、将泛型T具体化为具体类型
greeter = new Greeter<string>("john");
console.log(greeter.greet());

greeter = new Greeter<number>(12345);
console.log(greeter.greet());

greeter = new Greeter<Object>({ name: "john" });
console.log(greeter.greet());

/* 泛型最最常用场景 */
// let names:string[] = [];
let names: Array<string> = [];
names.push("john");

// 类型“number”的参数不能赋给类型“string”的参数。ts(2345)
// names.push(123)
